<title>Functions and passing arguments.</title>
<head>
<script language="JavaScript">
</script>
</head>
<body bgcolor="#ffffcc">
<center>
<hr>
<h1>Functions and passing arguments.</h1>
<hr>
</center>
A function is a block of code that can be executed many times by other
functions or its self.
<ul>
<li><a href=#2.1>Function basics.</a>
<li><a href=#2.2>Declaration.</a>
<li><a href=#2.3>Definition.</a>
<li><a href=#2.4>Passing values.</a>
<li><a href=#2.5>Passing pointers.</a>
<li><a href=#2.6>Passing Arrays.</a>
<li><a href=#2.7>Variable number of parms</a>
<li><a href=#2.8>Function recurssion.</a>
<li><a href=#2.9>Returning values.</a>
<li><a href=#2.10>Returning pointers.</a>
<font color="brown">
<li> C++ <a href="../../CPLUSPLUS/CONCEPT/reference_variable.html">Reference variables</a> 
<li> C++ <a href="../../CPLUSPLUS/CONCEPT/fundefault.html">Default parameters.</a> 
<li> C++ <a href="../../CPLUSPLUS/CONCEPT/funcoverload.html">Function Overloading.</a> 
</font>
</ul>

<hr>
<a name=2.1><h2>Function Basics.</h2>
You should already understand the concept of functions! If you don't, you 
are a sad sad man....<p>
Might expand on this one day.<p>
P.S. main() is a function. 

<a name=2.2><h2>Declaration.</h2>
Just like variables, all functions have to be 
<a href="../glossary.html#declaration">declared</a> before use. Here is an 
example.
<pre>
        int add( int, int);
</pre>
This statement declares a function called <b>add</b>, it has two integer
arguments and returns an integer.

<a name=2.3><h2>Definition.</h2>
The <a href="../glossary.html#definition">definition</a> is the meat of the 
function. Heres an <a href="../EXAMPLES/function.c">example.</a>

<a name=2.4><h2>Passing values.</h2>
Passing values is known as <b>call by value.</b> You actually pass a copy
of the variable to the function. If the function modifies the copy, the original 
remains unaltered. The previous example demonstarted <b>call by value</b>
<a name=2.5><h2>Passing pointers.</h2>
This is known as <b>call by reference</b> and is an area worth spending some
time on. We do not pass the data to the function, instead we pass a pointer
to the data. This means that if the function alters the data, the original
is altered.<p>
<dd><img src="../../GRAPHICS/whiteball.gif">
<a href="../EXAMPLES/pointer_func.c">  Example of passing a pointer to a scalar.</a>
<p>

<font color=brown>
C++ has a nice feature called 
<a href="../../CPLUSPLUS/CONCEPT/reference_variable.html">reference variables</a> 
which is a tider
approch to modifing the contents of a passed variable.
</font>

<a name=2.6><h2>Passing Arrays.</h2>
<dd><img src="../../GRAPHICS/whiteball.gif">
<a href="../EXAMPLES/pointer1_func.c">  Example of passing a pointer to an integer array.</a>
<dd><img src="../../GRAPHICS/whiteball.gif">
<a href="../EXAMPLES/pointer2_func.c">  Example of passing a pointer to a two 
dimensional integer array.</a>
<dd><img src="../../GRAPHICS/whiteball.gif">
<a href="../EXAMPLES/pointer3_func.c">  Example of passing a pointer to a 
character array.</a>
<dd><img src="../../GRAPHICS/whiteball.gif">
<a href="../EXAMPLES/pointer4_func.c">  Example of passing a two dimensional 
character array.</a>
<h2><a name=2.7>Variable number of parms (...)</a></h2>

<dd><img src="../../GRAPHICS/whiteball.gif">
<a href="../EXAMPLES/var_func.c">  Example of passing an unknown number
of variables to a function</a>

<dd><img src="../../GRAPHICS/man.gif">
<a href="../MAN/va_start.htm">  Man page for va_start, va_end etc</a>

<a name=2.8><h2>Function recurssion.</h2>
<a name=2.9><h2>Returning values.</h2>

Normally you would return an 'int', 'char', 'float', or 'double' using this 
technic. The obvious time to return a value would be to return a completion
code.
<p>
Here is an <a href="../EXAMPLES/function.c">example</a>
<p>
The contents of 'c' are copied into 'i'.

<a name=2.10><h2>Returning pointers.</h2>

Returning values is OK for the data types above but not very practical for 
'char *' or structures. For these data types passing pointers can be more 
appropriate. When using these pointers it is important to understand the
'<a href="../CONCEPT/storage_class.html#static2">static</a>' storage class 
otherwise you are going to get some unpredictable
results.

<p>

<hr>
<p>
<center>
<table border=2 width="80%" bgcolor="ivory">
<tr align=center>
<td width="25%">
<a href="../cref.html">                  Top</a>
</td><td width="25%">
<a href="../master_index.html">          Master Index</a>
</td><td width="25%">
<a href="keywords.html">                 Keywords</a>
</td><td width="25%">
<a href="../FUNCTIONS/funcref.htm">      Functions</a>
</td>
</tr>
</table>
</center>
<p>
<hr>
<address><a href="../../address.html">Martin Leslie</a> 
</address><p>
</body>
</html>
